﻿Imports iComm

Public Class MainService

    Private iWatcher As ClsWatcher
    'Private cnt As Long = 0
    Private flgStop As Integer = -1
    Private isStartErr As Boolean = False
    Private intTimeout As Integer = 0
    Private initService As InitService
    Private comm As New ClsComm

    Protected Overrides Sub OnStart(ByVal args() As String)

        ' サービスを開始するコードをここに追加します。このメソッドによって、
        ' サービスが正しく実行されるようになります
        Try
            isStartErr = False
            initService = New InitService

            '■イベントログ出力（出力メッセージ内容【メーラーサービス開始】）
            comm.WriteToEventLog(ClsStatic.MSG_EVENTLOG.SERVICES_START, ClsStatic.EventID.SuccessAudit)
            If initService.initSetting() = False Then
                isStartErr = True
                'メーラーサービス停止
                Throw New ApplicationException
            End If

            Dim threadSleep As New System.Threading.Thread(AddressOf loopSleepEvent)
            threadSleep.Start()

            'Dim t As New System.Timers.Timer()
            ''
            't.Interval = 5000

            'AddHandler t.Elapsed, New System.Timers.ElapsedEventHandler(AddressOf loopSleepEvent)
            ''時間があったら、定時実行処理を行う    
            't.AutoReset = False
            ''一回だけ実行するか（false）ずっと実行するか(true)；    
            't.Enabled = True
            ''System.Timers.Timer.Elapsedを実行すうか  
        Catch ex As ApplicationException
            flgStop = 0
            Me.Stop()
            SystemError.SystemLog("初期化失敗のため、サービス停止された")
        Catch ex As Exception
            flgStop = 0
            Me.Stop()
            SystemError.SystemLog("初期化失敗のため、サービス停止された")
        End Try
    End Sub

    Protected Overrides Sub OnStop()
        ' サービスを停止するのに必要な終了処理を実行するコードをここに追加します。
        Try
            flgStop = 1
            stopSleepEvent()

            'If Comm.pop3Client.Connected Then
            '    '通信終了処理
            '    'comm.pop3Client.Disconnect()
            '    Comm.pop3Client.Dispose()
            'End If

        Catch ex As ApplicationException
            Me.Stop()
            SystemError.SystemLog("サービス停止失敗のため、サービス停止された")
        Catch ex As Exception
            Me.Stop()
            SystemError.SystemLog("サービス停止失敗のため、サービス停止された")
        Finally
            Comm.WriteToEventLog(ClsStatic.MSG_EVENTLOG.SERVICES_STOP, ClsStatic.EventID.SuccessAudit)
            'Comm = Nothing
        End Try
    End Sub


    ''' <summary>
    ''' スリープイベント処理
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub loopSleepEvent()
        Try
            Do

                initService.initRoot()

                If flgStop = 1 Then
                    flgStop = 0
                    Exit Do
                End If

                System.Threading.Thread.Sleep(Integer.Parse(InitSettings.Instance.SendMailInterval))
            Loop Until 0 = 1

        Catch ex As ApplicationException
            flgStop = 0
            Me.Stop()
            SystemError.SystemLog("処理失敗のため、サービス停止された")
        Catch ex As Exception
            flgStop = 0
            Me.Stop()
            SystemError.SystemLog("処理失敗のため、サービス停止された")
        End Try
    End Sub

    ''' <summary>
    ''' スリープイベント処理
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub stopSleepEvent()
        Try
            If intTimeout >= 180 OrElse isStartErr = True Then
                intTimeout = 0
                Exit Sub
            End If
            System.Threading.Thread.Sleep(1000)
            If flgStop = 0 Then
                Exit Sub
            Else
                stopSleepEvent()
            End If
            intTimeout += 1

        Catch ex As ApplicationException
            Me.Stop()
            SystemError.SystemLog("サービス停止失敗のため、サービス停止された")
        Catch ex As Exception
            Me.Stop()
            SystemError.SystemLog("サービス停止失敗のため、サービス停止された")
        End Try
    End Sub

End Class
